﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using CondominioG1.Persistencia.NHibernate;
using CondominioG1.Dominio;

namespace CondominioG1.Pruebas.TestDAO
{
    [TestFixture]
    public class TestViviendaDAO
    {
        private ViviendaDAO ViviendaDAO = new ViviendaDAO();

        [Test]
        public void TestCrear()
        {
            // Instanciando la clase a probar
            Vivienda nuevaVivienda = new Vivienda();
            nuevaVivienda.Codigo = "0001";
            nuevaVivienda.Ubicacion = "Edificio 1";
            nuevaVivienda.Numero = 101;
            nuevaVivienda.Metraje = 80;
            nuevaVivienda.Tipo = "111";

            //Validamos que el Residente exista
            ResidenteDAO existeResidente = new ResidenteDAO();
            Residente residenteExiste = existeResidente.Obtener("acerna");
            nuevaVivienda.Residente = residenteExiste;

            //Validamos que el Residente exista
            ResidenteDAO existePropietario = new ResidenteDAO();
            Residente propietarioExiste = existePropietario.Obtener("acerna");
            nuevaVivienda.Propietario = propietarioExiste;
            
            // 2. Llamada al método del DAO a probar
            Vivienda ViviendaCreada = ViviendaDAO.Crear(nuevaVivienda);

            // 3. Implementar las validaciones
            Assert.NotNull(ViviendaCreada);
            Assert.AreEqual(nuevaVivienda.Codigo,ViviendaCreada.Codigo);            
        }
    
        [Test]
        public void TestObtener()
        {
            // 1. Instanciamos el objeto TO
            String codigo = "0001";
    
            // 2. Llamada al método del DAO a probar
            Vivienda ViviendaObtenida = ViviendaDAO.Obtener(codigo);
            // 3. Implementar las validaciones
            Assert.NotNull(ViviendaObtenida);
            Assert.AreEqual(codigo, ViviendaObtenida.Codigo);
            Assert.NotNull(ViviendaObtenida.Ubicacion);
        }
        [Test]
        public void TestModificar()
        {

            // 2. Instanciamos el objeto TO
            Vivienda ViviendaModificar = new Vivienda();
            ViviendaModificar.Codigo = "0001";
            ViviendaModificar.Ubicacion = "Edificio 111";
            ViviendaModificar.Numero = 100;
            ViviendaModificar.Metraje = 100;
            ViviendaModificar.Tipo = "Departame";

            //ViviendaModificar.Residente
            
                // 3. Llamada al método del DAO a probar
            Vivienda ViviendaObtenida = ViviendaDAO.Modificar(ViviendaModificar);
            // 4. Implementar las validaciones
            Assert.NotNull(ViviendaObtenida);
            Assert.AreEqual(ViviendaModificar.Codigo, ViviendaObtenida.Codigo);

        }
        [Test]
        public void TestEliminar()
        {

            // 2. Instanciamos el objeto TO
            Vivienda ViviendaEliminar = new Vivienda();
            ViviendaEliminar.Codigo = "0001";
            // 3. Llamada al método del DAO a probar
            Assert.Catch<Exception>(delegate
            {
                ViviendaDAO.Eliminar(ViviendaEliminar);
            });
            Assert.DoesNotThrow(delegate
            {
                ViviendaDAO.Eliminar(ViviendaEliminar);
            });

            Assert.IsNull(ViviendaEliminar);

            // 4. Implementar las validaciones
           // Assert.NotNull(ViviendaEliminar);
           // Assert.NotNull(ViviendaEliminar.Codigo);
           


        }
        [Test]
        public void TestListarViviendaPorTipo()
        {
            string tipo = "Departamento";
            ICollection<Vivienda> LVivienda = ViviendaDAO.ListarViviendaPorTipo(tipo);
            Assert.NotNull(LVivienda);
            Assert.Greater(LVivienda.Count, 1);
        }
    }
}